2017-09-22 3 views
2

ich Push-Benachrichtigung und ich möchte diese Welt aktualisieren Objekte, wenn das Telefon eine Benachrichtigung erhält, aber wenn ich versuche, dies zu starten:FirebaseMessagingService nicht in AsyncTask der doInBackground immer genannt

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); 

Das Programm springt in den Konstruktor ServerBackgroundDownloadConversations(getApplicationContext()) aber DoInBackground nicht aufrufen und ich weiß nicht warum.

Mein 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(); 
     } 
    } 
} 

Ich versuche diese ↑ von einem Außengewinde Aufruf, die von einem Dienst aufgerufen wird, aber mein AsyncTask hat Handler und Handler muss in runOnUIthread und in diesem Thema sein. Ich kann keine Aktivität abrufen, weil der Thread von einem Dienst aufgerufen wird, der keinen Zugriff auf Aktivität hat.

Antwort

0

löste ich mein Problem mit diesem Code

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; 
} 

Ich versuche, werde in einfach fädeln diese Methode & nach dieser Methode zu setzen, aber vielleicht ist es nicht notwendig, weil es in einem Dienst ist.

Frage - Füge ich dies in Thread ein oder denkst du, dass es die Leistung der App beeinträchtigen wird?

Verwandte Themen