2013-11-22 2 views
0

Загружаем файл на сервер и для этого я назначил время автоматически с помощью таймера. Но я получаю ошибку ClassCastException: активность не может быть передана в широковещательный приемник. Вот мой класс активность:исключение класса cast в android Broadcast receiver

public class AlarmActivity extends Activity 
    { 
      @Override 
      public void onCreate(Bundle savedInstanceState) 
      { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.alarm_main); 
      } 

     public void scheduleAlarm(View V) 
     { 

       Long time = new GregorianCalendar().getTimeInMillis()+30000; 

       Intent intentAlarm = new Intent(this, ServerActivity.class); 


       AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this,1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT)); 
       Toast.makeText(this, "File Scheduled to the server", Toast.LENGTH_LONG).show(); 

     } 
    } 

ServerActivity:

public class ServerActivity extends Activity { 

    TextView messageText; 
    Button uploadButton; 
    int serverResponseCode = 0; 
    ProgressDialog dialog = null; 

    String upLoadServerUri = null; 

    final String uploadFilePath = "mypath"; 
    final String uploadFileName = "myfile"; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_server); 

     uploadButton = (Button)findViewById(R.id.uploadButton); 
     messageText = (TextView)findViewById(R.id.messageText); 

     messageText.setText("Uploading file path :- 'path"+uploadFileName+"'"); 


     upLoadServerUri = "serverpath"; 

     uploadButton.setOnClickListener(new OnClickListener() 
     {    
      @Override 
      public void onClick(View v) 
      { 

       dialog = ProgressDialog.show(UploadToServer.this, "", "Uploading file...", true); 

       new Thread(new Runnable() 
       { 
         public void run() 
         { 
          runOnUiThread(new Runnable() 
          { 
            public void run() 
            { 
             messageText.setText("uploading started....."); 
            } 
           });      

          uploadFile(uploadFilePath + "" + uploadFileName); 

         } 
         }).start();   
       } 
      }); 
    } 

    public int uploadFile(String sourceFileUri) 
    { 


      String fileName = sourceFileUri; 

      HttpURLConnection conn = null; 
      DataOutputStream dos = null; 
      String lineEnd = "\r\n"; 
      String twoHyphens = "--"; 
      String boundary = "*****"; 
      int bytesRead, bytesAvailable, bufferSize; 
      byte[] buffer; 
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 

      if (!sourceFile.isFile()) 
      { 

       dialog.dismiss(); 

       Log.e("uploadFile", "Source File not exist :" 
            +uploadFilePath + "" + uploadFileName); 

       runOnUiThread(new Runnable() 
       { 
        public void run() 
        { 
         messageText.setText("Source File not exist :" +uploadFilePath + "" + uploadFileName); 
        } 
       }); 

       return 0; 

      } 
      else 
      { 
       try 
       { 

        // open a URL connection to the Servlet 
        FileInputStream fileInputStream = new FileInputStream(sourceFile); 
        URL url = new URL(upLoadServerUri); 

        // Open a HTTP connection to the URL 
        conn = (HttpURLConnection) url.openConnection(); 
        conn.setDoInput(true); // Allow Inputs 
        conn.setDoOutput(true); // Allow Outputs 
        conn.setUseCaches(false); // Don't use a Cached Copy 
        conn.setRequestMethod("POST"); 
        conn.setRequestProperty("Connection", "Keep-Alive"); 
        conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
        conn.setRequestProperty("uploaded_file", fileName); 

        dos = new DataOutputStream(conn.getOutputStream()); 

        dos.writeBytes(twoHyphens + boundary + lineEnd); 
        dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
              + fileName + "\"" + lineEnd); 

        dos.writeBytes(lineEnd); 

        // create a buffer of maximum size 
        bytesAvailable = fileInputStream.available(); 

        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        buffer = new byte[bufferSize]; 

        // read file and write it into form... 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        while (bytesRead > 0) 
        { 

        dos.write(buffer, 0, bufferSize); 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        } 

        // send multipart form data necesssary after file data... 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

        // Responses from the server (code and message) 
        serverResponseCode = conn.getResponseCode(); 
        String serverResponseMessage = conn.getResponseMessage(); 

        Log.i("uploadFile", "HTTP Response is : " 
          + serverResponseMessage + ": " + serverResponseCode); 

        if(serverResponseCode == 200) 
        { 

         runOnUiThread(new Runnable() 
         { 
          public void run() 
          { 

           String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"+" serverpath" 
               +uploadFileName; 

           messageText.setText(msg); 
           Toast.makeText(UploadToServer.this, "File Upload Complete.", 
              Toast.LENGTH_SHORT).show(); 
          } 
         });     
        }  

        //close the streams // 
        fileInputStream.close(); 
        dos.flush(); 
        dos.close(); 

       } 
       catch (MalformedURLException ex) 
       { 

        dialog.dismiss(); 
        ex.printStackTrace(); 

        runOnUiThread(new Runnable() 
        { 
         public void run() 
         { 
          messageText.setText("MalformedURLException Exception : check script url."); 
          Toast.makeText(UploadToServer.this, "MalformedURLException", Toast.LENGTH_SHORT).show(); 
         } 
        }); 

        Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
       } 
       catch (Exception e) 
       { 

        dialog.dismiss(); 
        e.printStackTrace(); 

        runOnUiThread(new Runnable() 
        { 
         public void run() 
         { 
          messageText.setText("Got Exception : see logcat "); 
          Toast.makeText(UploadToServer.this, "Got Exception : see logcat ", 
            Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        Log.e("Upload file to server Exception", "Exception : " 
                + e.getMessage(), e); 
       } 
       dialog.dismiss();  
       return serverResponseCode; 

      } 
     } 
    } 

манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.aisu.testingapps" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="12" /> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <activity 
      android:name=".AlarmActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".ServerActivity"/> 
    </application> 
</manifest> 

и мой LogCat является:

11-22 04:42:30.989: E/AndroidRuntime(1086): FATAL EXCEPTION: main 
11-22 04:42:30.989: E/AndroidRuntime(1086): java.lang.RuntimeException: Unable to instantiate receiver com.example.ServerActivity: java.lang.ClassCastException: com.example.ServerActivity cannot be cast to android.content.BroadcastReceiver 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2100) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at android.os.Looper.loop(Looper.java:137) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at android.app.ActivityThread.main(ActivityThread.java:4429) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at dalvik.system.NativeStart.main(Native Method) 
11-22 04:42:30.989: E/AndroidRuntime(1086): Caused by: java.lang.ClassCastException: com.aisu.testingapps.AndroidUploadActivity cannot be cast to android.content.BroadcastReceiver 
11-22 04:42:30.989: E/AndroidRuntime(1086):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2095) 
11-22 04:42:30.989: E/AndroidRuntime(1086):  ... 10 more 

ответ

-1

Чистый проект, это может решать вопрос е.

+0

Я очистил проект, но вопрос остается тот же – AndroidOptimist

0

ServerActivity является активность не приемник.

В то время как вы объявляете его как Ресивер в AndroidManifest.xml

+0

, если я объявляю это как деятельность, она не движется к следующей деятельности – AndroidOptimist

0
<receiver android:name=".ServerActivity"/> 

Вы зарегистрировали ServerActivity как BroadcastReciever но, как я могу видеть из вашего кода ServerActivity является активность. Вот почему вы получаете classcastexception, так как андроид пытается передать Activity BroadcastReciever. Вашему классу необходимо расширить BroadcastReciever, если вы хотите использовать любой класс в качестве BroadcastReciever.

0

В вашем манифесте Добавьте это под приложением.

<receiver 
      android:name="GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.example.gcm" /> 
      </intent-filter> 
</receiver> 

Создать класс как GcmBroadcastReceiver и использовать этот код,

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Explicitly specify that GcmIntentService will handle the intent. 
     ComponentName comp = new ComponentName(context.getPackageName(), 
       GcmIntentService.class.getName()); 
     // Start the service, keeping the device awake while it is launching. 
     startWakefulService(context, (intent.setComponent(comp))); 
     setResultCode(Activity.RESULT_OK); 
    } 
} 
Смежные вопросы