2016-05-14 12 views
0

Ich möchte ein Array an doInbackground() -Funktion übergeben und Ergebnisse davon erhalten. eigentlich weiß ich nicht, wie man das Array an PhP-Datei weitergibt und wie man das in der Datenbank sucht. Bitte, wenn Sie nicht helfen wollen, machen Sie es nicht doppelt oder machen Sie andere nicht, um mir zu helfen. hier ist code was ich ausprobiert habe.Array an doInBackground-Funktion übergeben und Ergebnis daraus erhalten?

zuerst bekomme ich die Werte von Server-Datenbank und parse es und möchte es in Array speichern. GANZE FRAGMENT CODE

public class eventsFragment extends Fragment { 
ImageView imageView; 
ListView listEvents; 
private TextView noevents; 
SessionManager session; 
String JSONString, json_string; 
ArrayList<String> json_string1; 

JSONObject jsonObject; 
AdapterOwnEvents adapterOwnEvents; 
JSONArray jsonArray; 


public eventsFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_news_feed, container, false); 
    listEvents = (ListView) view.findViewById(R.id.listEvents1); 
    noevents = (TextView) view.findViewById(R.id.noEvents); 
    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    SearchFriends(); 
} 

public void SearchFriends() { 
    session = new SessionManager(getActivity().getApplicationContext()); 
    HashMap<String, String> user = session.getUserDetails(); 
    String user_id = user.get(SessionManager.KEY_ID); 
    new BackgroundSearch().execute(user_id); 

} 

class BackgroundSearch extends AsyncTask<String, Void, String> { 
    String search_url; 

    @Override 
    protected void onPreExecute() { 
     search_url = "http://www.example.com/friendList.php"; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String user_id = params[0]; 

     try { 
      URL url = new URL(search_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
      String data = URLEncoder.encode("user_id", "UTF-8") + "=" + URLEncoder.encode(user_id, "UTF-8"); 
      bufferedWriter.write(data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      outputStream.close(); 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
      StringBuilder stringBuilder = new StringBuilder(); 
      while ((JSONString = bufferedReader.readLine()) != null) { 

       stringBuilder.append(JSONString).append("\n"); 
      } 
      bufferedReader.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 
      return stringBuilder.toString().trim(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

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

    @Override 
    protected void onPostExecute(String result) { 
     json_string = result; 
     try { 
      jsonObject = new JSONObject(json_string); 
      jsonArray = jsonObject.getJSONArray("server_response"); 

      int count = 0; 
      String friend_id; 
      ArrayList<String> array1 = new ArrayList<String>(); 
      while (count < jsonArray.length()) { 
       JSONObject JO = jsonArray.getJSONObject(count); 
       friend_id = JO.getString("friend_id"); 
       array1.add(friend_id); 

       count++; 
      } 
      new BackgroundSearchEvents().execute(array1); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

class BackgroundSearchEvents extends AsyncTask<ArrayList<String>, Void, String> { 
    String search_url; 

    @Override 
    protected void onPreExecute() { 
     search_url = "http://www.example.com/eventList.php"; 
    } 


    @SafeVarargs 
    @Override 
    protected final String doInBackground(ArrayList<String>... passing) { 
     // ArrayList<String> result = new ArrayList<String>(); 
     ArrayList<String> passed = passing[0]; 


     try { 
      URL url = new URL(search_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
      // int count = 0; 
      String user_id; 
      for (int count = 0 ; count<passing.length; count++) { 
       user_id=passed.get(count); 
       String data = URLEncoder.encode("user_id", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(user_id), "UTF-8"); 
       bufferedWriter.write(data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 
       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
       StringBuilder stringBuilder = new StringBuilder(); 
       while ((JSONString = bufferedReader.readLine()) != null) { 

        stringBuilder.append(JSONString).append("\n"); 
       } 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return stringBuilder.toString().trim(); 
       // count++; 



      } 
     // return result; 
      //return stringBuilder.toString().trim(); 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

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

    @Override 
    protected void onPostExecute(String result) { 
     json_string = result; 
     ParseJson(); 
    } 
} 

public void ParseJson() { 

    if (json_string == null) { 
     Toast.makeText(getActivity(), "No Events", Toast.LENGTH_LONG).show(); 
    } else { 
     // listEvents.setAdapter(adapterOwnEvents); 
     adapterOwnEvents = new AdapterOwnEvents(getActivity(), R.layout.own_event_list); 
     listEvents.setAdapter(adapterOwnEvents); 
     try { 
      jsonObject = new JSONObject(json_string); 
      jsonArray = jsonObject.getJSONArray("server_response"); 

      int count = 0; 
      String event_id, event, event_type, date, image, friend_id; 
      while (count < jsonArray.length()) { 
       JSONObject JO = jsonArray.getJSONObject(count); 
       event_id = JO.getString("event_id"); 
       event = JO.getString("event"); 
       date = JO.getString("date"); 
       event_type = JO.getString("event_type"); 
       friend_id = JO.getString("user_id"); 
       image = ("http://example.com/uploads/" + friend_id + ".png"); 

       Own_EventListElements own_eventListElements = new Own_EventListElements(event_id, event, event_type, date, image); 
       adapterOwnEvents.add(own_eventListElements); 
       listEvents.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 

         Own_EventListElements eventsElements = (Own_EventListElements) adapterOwnEvents.getItem(position); 
         Intent i = new Intent(getActivity(), SendGreetings.class); 

         startActivity(i); 
        } 
       }); 
       count++; 
      } 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


} 

das ist mein Adapter

public class AdapterOwnEvents extends ArrayAdapter { 
List list=new ArrayList(); 
public AdapterOwnEvents(Context context, int resource) { 
    super(context, resource); 
} 
public void add(Own_EventListElements object) { 
    super.add(object); 
    list.add(object); 
} 
@Override 
public int getCount() { 
    return list.size(); 
} 

@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 
    view=convertView; 
    ElementsHolder elemetsHolder=new ElementsHolder(); 
    if (view==null){ 
     LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = layoutInflater.inflate(R.layout.own_event_list,parent,false); 
     elemetsHolder.tx_Event=(TextView) view.findViewById(R.id.event_name); 
     elemetsHolder.tx_Date=(TextView) view.findViewById(R.id.event_date); 
     view.setTag(elemetsHolder); 
    } 
    else 
    { 
     elemetsHolder=(ElementsHolder) view.getTag(); 

    } 
    Own_EventListElements own_eventListElements=(Own_EventListElements)this.getItem(position); 
    elemetsHolder.tx_Event.setText(own_eventListElements.getEvent()); 
    elemetsHolder.tx_Date.setText(own_eventListElements.getDate()); 

    return view; 
} 

static class ElementsHolder 
{ 
    TextView tx_Event,tx_Date; 
} 

} 

und hier ist die PHP-Datei

$con = mysqli_connect($server_name, $mysql_user, $mysql_pass, $db_name); 
$user_id = $_POST["user_id"]; 
$sql_query = "select event_id, event, event_type, date, user_id from events where user_id like '$user_id'"; 
$result = mysqli_query($con,$sql_query); 
$response = array(); 
while($row = mysqli_fetch_array($result)) 
{ 
array_push($response,array("event_id"=>$row[0],"event"=>$row[1],"event_type"=>$row[2],"date"=>$row[3],"user_id"=>$row[4])); 
} 
echo json_encode(array("server_response"=>$response)); 

mysqli_close($con); 

aber es ist mir

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 

Bitte Fehler geben helfen mich. Vielen Dank im Voraus

EDIT: Hier ist i diesen

View view = inflater.inflate(R.layout.fragment_news_feed, container, false); 
    ListView listEvents = (ListView) view.findViewById(R.id.listEvents1); 

    return view; 

Logcat

FATAL EXCEPTION: main 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime: Process: com.example.bebo, PID: 17664 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at com.example.bebo.eventsFragment.ParseJson(eventsFragment.java:230) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at com.example.bebo.eventsFragment$BackgroundSearchEvents.onPostExecute(eventsFragment.java:221) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at com.example.bebo.eventsFragment$BackgroundSearchEvents.onPostExecute(eventsFragment.java:155) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at android.os.AsyncTask.finish(AsyncTask.java:636) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at android.os.AsyncTask.access$500(AsyncTask.java:177) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:111) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:194) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5653) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
05-14 11:37:00.733 17664-17664/com.example.bebo E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
+0

Sein sagt Ihr 'ListView' ist ** ** null. Wo ist der Code von 'setAdapter()' zu List ?? –

+0

aber Thera sind Werte in der Datenbank und bitte sagen Sie mir, wie man es löst? Gibt es einen Fehler in meiner Technik, die Arrays zu verwenden? @jankigadhiya – bebo

+0

@jankigadhiya setAdapter ist eingebaute Funktion in androiden Studio, um den Adapter für die Liste der Ergebnisse – bebo

Antwort

0

Initialisieren der Liste in onCreate():

listEvents = (ListView)findViewById(R.id.list_id); 

ändern ParseJson() Methode wie folgt:

public void ParseJson() { 

if (json_string == null) { 
    Toast.makeText(getActivity(), "No Events", Toast.LENGTH_LONG).show(); 
} else { 

    adapterOwnEvents = new AdapterOwnEvents(getActivity(), R.layout.own_event_list); 
    listEvents.setAdapter(adapterOwnEvents); 
    try { 
     jsonObject = new JSONObject(json_string); 
     jsonArray = jsonObject.getJSONArray("server_response"); 

     int count = 0; 
     String event_id, event, event_type, date, image, friend_id; 
     while (count < jsonArray.length()) { 
      JSONObject JO = jsonArray.getJSONObject(count); 
      event_id = JO.getString("event_id"); 
      event = JO.getString("event"); 
      date = JO.getString("date"); 
      event_type = JO.getString("event_type"); 
      friend_id = JO.getString("user_id"); 
      image = ("http://example.com/uploads/" + friend_id + ".png"); 

      Own_EventListElements own_eventListElements = new Own_EventListElements(event_id, event, event_type, date, image); 
      adapterOwnEvents.add(own_eventListElements); 
      listEvents.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, 
             int position, long id) { 

        Own_EventListElements eventsElements = (Own_EventListElements) adapterOwnEvents.getItem(position); 
        Intent i = new Intent(getActivity(), SendGreetings.class); 

        startActivity(i); 
       } 
      }); 
      count++; 
     } 


    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
} 

Versuchen Sie, Ihre Listview Globale

EDIT: Anruf SearchFriends() in onCreateView()

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_news_feed, container, false); 
    listEvents = (ListView) view.findViewById(R.id.listEvents1); 
    noevents = (TextView) view.findViewById(R.id.noEvents); 
    SearchFriends(); 
    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
} 
+0

Ich habe das versucht, aber es funktioniert nicht. zeigt den gleichen Fehler wieder – bebo

+0

wo initialisierst du 'listEvents' ??Es ist Listenansicht richtig? teile diesen Code .. Du machst 'findViewById()' ?? –

+0

ja, es ist meine aktualisierte Frage Ich habe dies in letzten – bebo

0

Sie Adapter in Ihrem ParsJson Verfahren vor initialisieren adapterOwnEvents nicht gesetzt ist initialisiert.

adapterOwnEvents = new AdapterOwnEvents(getActivity(), R.layout.own_event_list); 
    listEvents.setAdapter(adapterOwnEvents); 

statt

listEvents.setAdapter(adapterOwnEvents); 
    adapterOwnEvents = new AdapterOwnEvents(getActivity(), R.layout.own_event_list); 
    listEvents.setAdapter(adapterOwnEvents); 

und ich schlage vor, Sie Gson Bibliothek für das Parsen von JSON zu verwenden.

+0

Ich bekomme Sie nicht .. können Sie bitte erklären es mehr? – bebo

+0

Ich habe das jetzt versucht, aber den gleichen Fehler angezeigt. – bebo