2016-04-18 7 views
1

Ich beabsichtige, co.user_id an die öffentliche statische Zeichenfolge USER_ID zu übergeben, damit die Daten in der Zeichenfolge user_id von der onPostExecute-Funktion an eine andere Klasse gesendet werden können. Von der anderen Klasse erhalte ich jedoch den Wert null, was bedeutet, dass der Wert nicht an diese Klasse gesendet wurde. Wie soll ich meinen Wert in String speichern, damit der Wert auch in einer anderen Klasse verfügbar ist?Wie übergebe ich Daten in einen String, wo der String in einer anderen Klasse zugänglich ist?

public class connect3 extends AsyncTask<String, Void, String> { 
View view; 
Activity activity; 
public static String USER_ID = " "; 
public connect3(Activity activity, View v) { 
    this.activity = activity; 
    view = v; 
} 

String convertStreamToString(InputStream is) { 
    try { 
     return new java.util.Scanner(is).useDelimiter("\\A").next(); 
    } catch (java.util.NoSuchElementException e) { 
     return ""; 
    } 
} 
protected String doInBackground(String... arg0) { 
    String ipAddress = "http://192.168.1.3/apexStore2/"; 
    try { 
     URL url = new URL(ipAddress +"receipts.php"); 
     String urlParameters = 
       URLEncoder.encode("user_name", "UTF-8") + "=" + 
    URLEncoder.encode(arg0[0], "UTF-8") + "&" + 
         URLEncoder.encode("user_id", "UTF-8") + "=" + 
    URLEncoder.encode("???", "UTF-8"); 

     HttpURLConnection connection = (HttpURLConnection) 
    url.openConnection(); 

     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Content-Type", 
       "application/x-www-form-urlencoded"); 

     connection.setRequestProperty("Content-Length", "" + 
       Integer.toString(urlParameters.getBytes().length)); 
     connection.setRequestProperty("Content-Language", "en-US"); 

     connection.setUseCaches(false); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 

     //Send request 
     DataOutputStream wr = new DataOutputStream (
       connection.getOutputStream()); 
     wr.writeBytes (urlParameters); 
     wr.flush(); 
     wr.close(); 

     //Get Response 
     InputStream is = connection.getInputStream(); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
     String line; 
     StringBuffer response = new StringBuffer(); 
     while((line = rd.readLine()) != null) { 
      response.append(line); 
      response.append('\r'); 
     } 
     rd.close(); 
     //System.out.println(response.toString()); 

     JSONObject mainObject = new JSONObject(response.toString()); 
     JSONArray uniObject = mainObject.getJSONArray("results"); 
     for(int i = 0; i < uniObject.length(); i++) { 
      ContactReceipt co = new ContactReceipt(); 
      JSONObject rowObject = uniObject.getJSONObject(i); 
      //EventObject co = new EventObject(); 
      co.user_id = rowObject.getString("user_id"); 
      USER_ID = co.user_id; 
    System.out.println("hi1" + co.user_id); 
    } 
     //To further break down JSON 
     //JSONObject oneObject = mainObject.getJSONObject("1"); 
     //String id = oneObject.getJSONObject("id"); 
     try{ 

     } 
     finally{ 
      connection.disconnect(); 
     } 
    } catch (Exception e){ 
     System.out.println(e.toString()); 
    } 
    return USER_ID; 
    //return ""; 
} 

protected void onPreExecute(){ 

} 

@Override 
protected void onPostExecute(String result){ 
    // receipt1.user_id = user_id; 
    // String search = USER_ID; 
    // Intent intent = new Intent(activity.getApplication(),receipt1.class); 
    //intent.putExtra(USER_ID, search); 
    //activity.startActivity(intent); 
    Intent intent = new Intent(activity.getApplication(),receipt1.class); 
    intent.putExtra("USER_ID", result); 
    activity.startActivity(intent); 
} 

} 

So nenne ich den Wert in einer anderen Klasse.

Intent intent = getIntent(); 
    String cats = intent.getStringExtra("USER_ID"); 
+0

Sie im 'doInBackground Rückkehr mehrere Werte müssen erhalten()' und seine seltsamen Sie es mit einem einzelnen String überschreiben. Sie sollten hier arrayList verwenden, um alle Werte abzurufen. –

+1

Bitte reduzieren Sie Ihr Codebeispiel auf ein Minimum, bei dem das Problem weiterhin besteht. Als Nebenbemerkung ist das Übergeben von Ergebnissen durch ein öffentliches statisches Feld auf vielen Ebenen eine schreckliche Idee. Da Sie ja über 'Intent's sprechen, nehme ich an, dass dies mit der Android-Entwicklung zusammenhängt - bitte kennzeichnen Sie es als solches. – CptBartender

+0

so für die Array-Liste sollte ich es wie ArrayList geschrieben list = new ArrayList (); list.add (co.user_id) ;. –

Antwort

0

Da es mehr als eine UserIds dies ist, wie Sie es zu Ihrer Tätigkeit siehe unten vollständigen Code passieren sollte: es so in Ihrer Aktivitätsklasse

public class Connect3 extends AsyncTask<String, Void, List<String>> { 
    View view; 
    Activity activity; 
    public static String USER_ID = "yourpackagename.USER_ID"; 
    private List<String> listUserIds; 
    public Connect3(Activity activity, View v) { 
     this.activity = activity; 
     view = v; 
    } 

    String convertStreamToString(InputStream is) { 
     try { 
      return new java.util.Scanner(is).useDelimiter("\\A").next(); 
     } catch (java.util.NoSuchElementException e) { 
      return ""; 
     } 
    } 
    protected List<String> doInBackground(String... arg0) { 
     String ipAddress = "http://192.168.1.3/apexStore2/"; 
     try { 
      URL url = new URL(ipAddress +"receipts.php"); 
      String urlParameters = 
        URLEncoder.encode("user_name", "UTF-8") + "=" + 
          URLEncoder.encode(arg0[0], "UTF-8") + "&" + 
          URLEncoder.encode("user_id", "UTF-8") + "=" + 
          URLEncoder.encode("???", "UTF-8"); 

      HttpURLConnection connection = (HttpURLConnection) 
        url.openConnection(); 

      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Content-Type", 
        "application/x-www-form-urlencoded"); 

      connection.setRequestProperty("Content-Length", "" + 
        Integer.toString(urlParameters.getBytes().length)); 
      connection.setRequestProperty("Content-Language", "en-US"); 

      connection.setUseCaches(false); 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 

      //Send request 
      DataOutputStream wr = new DataOutputStream (
        connection.getOutputStream()); 
      wr.writeBytes (urlParameters); 
      wr.flush(); 
      wr.close(); 

      //Get Response 
      InputStream is = connection.getInputStream(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
      String line; 
      StringBuffer response = new StringBuffer(); 
      while((line = rd.readLine()) != null) { 
       response.append(line); 
       response.append('\r'); 
      } 
      rd.close(); 
      //System.out.println(response.toString()); 

      JSONObject mainObject = new JSONObject(response.toString()); 
      JSONArray uniObject = mainObject.getJSONArray("result"); 

      if(uniObject != null && uniObject.length() > 0) { 

       listUserIds = new ArrayList<>(uniObject.length()); 

       for (int i = 0; i < uniObject.length(); i++) { 
        ContactReceipt co = new ContactReceipt(); 
        JSONObject rowObject = uniObject.getJSONObject(i); 
        //EventObject co = new EventObject(); 
        co.user_id = rowObject.getString("user_id"); 

        System.out.println("hi1" + co.user_id); 

        listUserIds.add(co.user_id); 
       } 
      } 

      connection.disconnect(); 

     } catch (Exception e){ 
      System.out.println(e.toString()); 
     } 

     return listUserIds; 
    } 

    protected void onPreExecute(){ 

    } 

    @Override 
    protected void onPostExecute(List<String> result){ 
     // receipt1.user_id = user_id; 

     Intent intent = new Intent(activity.getApplication(),receipt1.class); 
     if(result != null){ 
      intent.putStringArrayListExtra(USER_ID, (ArrayList<String>) result); 
     } 

     activity.startActivity(intent); 
    } 

} 

Und Sie erhalten

if(getIntent() != null){ 
    ArrayList<String> listUserIds = getIntent().getStringArrayListExtra(Connect3.USER_ID); 
} 
+0

Ich versuche Ihren Code, aber ich bekomme immer noch null Wert –

+0

Haben Sie überprüft, ob Sie einen Wert von Ihrem Server bekommen? hier 'JSONObject mainObject = neues JSONObject (response.toString());' ist Antwortstring hat einen Wert darin. –

+0

ja ich bekomme Wert von meinem Server –

0

kurz vor überprüfen geben Sie den Wert

Intent intent = new Intent(activity.getApplication(),receipt1.class); 
if(!result.equalsIgnoreCase("") && search !=null){ 
intent.putExtra("USER_ID", result); 
} else{ 
intent.putExtra("USER_ID", "result is null or empty"); 
} 

und versuchen Wert wie diese

Intent intent = getIntent(); 
    if(intent !=null){ 
     String cats = intent.getStringExtra("USER_ID"); 
     Log.e("value",cats); 
    // if cats prints "result is null or empty" that means problem inside your doinback..... 
    } 
+0

E/value: 11. Ich habe Wert für Log.e bekommen. Der Wert ist 11 was ich will –

+0

Sie erhalten Ihren gewünschten Wert ... so was ist das Problem jetzt ?? –

+1

yup sorry, ist meine Sorglosigkeit. Ich habe die Daten. Danke :) –

Verwandte Themen