2017-09-22 7 views
2

私はプッシュ通知を持っていると私は電話が通知を取得するときにレルムがオブジェクトを更新したいが、私はこれを起動しようとしたときに呼び出され取得されていません。FirebaseMessagingServiceはAsyncTaskのdoInBackground

RealmModelActiveUser actUser= realm.where(RealmModelActiveUser.class).equalTo("id",1).findFirst(); 
       int myid= actUser.getUser().getUser_id(); 
       new ServerBackgroundDownloadConversations(getApplicationContext()) { 
        @Override 
        protected void onPostExecute(String result) { 
         super.onPostExecute(result); 

         if (!result.equals("Error")) { 
          Log.i("Conversation", "UPDATED"); 
         } 
        } 
       }.execute(myid); 

をプログラムがコンストラクタにジャンプServerBackgroundDownloadConversations(getApplicationContext())が、 doInBackgroundは呼び出されず、理由はわかりません。

マイAsyncTask:

public class ServerBackgroundCreateConversation extends AsyncTask<RealmModelConversations,Void,String> { 
    Context context; 

    Handler handler; 
    String out= ""; 
    @SuppressLint("HandlerLeak") 
    public ServerBackgroundCreateConversation(Context context) { 
     this.context = context; 

     handler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       Bundle bundle= msg.getData(); 
       if (bundle!=null){ 
        out = (String) bundle.get("response"); 
       } else { 
        out= "Error"; 
       } 
      } 

     }; 
    } 


    @Override 
    protected String doInBackground(RealmModelConversations... params) { 
     RealmModelConversations newConv = params[0]; 
      UploadImageApacheHttp uploadTask = new UploadImageApacheHttp(); 
      uploadTask.doFileUpload(newConv.getWork(newConv.getIntWork()), newConv, handler); 


      while (out.equals("")){ 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     return out; 
    } 

    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     if (!result.equals("]") || !result.equals("")){ 
      /// prihlási nového user aj do active (login/register) 
      CreateNewConversation(result); 
     } else { 
      result="Error"; 
     } 

    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 


    private void CreateNewConversation(String result){ 
     Realm realm= Realm.getDefaultInstance(); 
     try { 
      Gson gson = new Gson(); 
      Type typeConv = new TypeToken<JsonSablonaConversations>() { 
      }.getType(); 

      JSONObject pom; 
      JSONArray parentArray = new JSONArray(result); 
      JSONObject finalObject = parentArray.getJSONObject(0); 

      JsonSablonaConversations conversation = gson.fromJson(finalObject.toString(), typeConv); 
      final RealmModelConversations NewUserConv = new RealmModelConversations(); 
      NewUserConv.setId_dialog(conversation.getId_dialog()); 
      NewUserConv.setDate(conversation.getDate()); 
      NewUserConv.setKey(conversation.getKey()); 
      NewUserConv.setId_user(conversation.getId_user()); 
      NewUserConv.setId_user2(conversation.getId_user2()); 
      NewUserConv.setMeno(conversation.getMeno()); 
      NewUserConv.setMeno2(conversation.getMeno2()); 
      realm.executeTransaction(new Realm.Transaction() { 
       @Override 
       public void execute(Realm realm) { 
        try { 
         realm.copyToRealmOrUpdate(NewUserConv); 
        } catch (Exception e) { 
         int pom=4; 
        } 
        RealmResults<RealmModelConversations> ru= realm.where(RealmModelConversations.class).findAll(); 
       } 
      }); 
     } 

     catch (Exception e) { 
      int ppp=4; 
      ppp++; 
     }finally { 
      realm.close(); 
     } 
    } 
} 

私がサービスから呼び出された外部のスレッドからこの↑を呼び出してみてください、私のAsyncTaskはハンドラとハンドラがrunOnUIthreadにとスレッドにする必要があります。アクティビティにアクセスできないサービスからスレッドが呼び出されるため、Activityを取得できません。

答えて

0

私はこのコード

public String postData(int myUserId) { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://www.gallopshop.eu/OFY/getConversations.php"); 
    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("id", Integer.toString(myUserId))); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     String responseStr = EntityUtils.toString(response.getEntity()); 
     return responseStr; 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 
    return null; 
} 

と私の問題を解決し、私は単純にスレッドには、この方法の後に、この方法&を置くしようとします、しかし、それがサービス中ですので、多分それは必要ありません。

質問 - これをスレッドに入れますか、それともアプリのパフォーマンスに影響すると思いますか?

関連する問題