2015-12-21 3 views
0

Привет Я новичок в Android, и я застрял в этом problem.So это то, что я пытаюсь сделать, используя объект ответа залпВозвращает строку внутри метода, используемого для создания jsonObjectRequest

private void parseJSONResponse(JSONObject response) 
{ 
int a = jsonObject.getInt("xxx"); //get 1st parameter 

String mid = jsonObject.getString("Movieid"); //get an id 
String murl = genrate(mid); //send id to genrate method which returns another url 
String x=createmovieJSON(murl);//method to create JsonObjectRequest object using the new url and return string. 


info.add(new information(a,x)); //pass int and string for generating a card layout 
} 

метод createmovieJSON выглядит следующим образом:

public String createmovieJSON(String strurl) 
{ 
    final String[] str=(null);  //str[0] contains null 
    RequestQueue requestQueue = Singelton.instantinate().getRequestqueue();      

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, strurl, 
      new Response.Listener<JSONObject>()             
      { 
       @Override 
       public void onResponse(JSONObject response) 
       { 

        str[0] = parseMovieResponse(response); //str[0] contains required string say'abc' 
        new Toastnotify(getApplicationContext(),str[0]); 


       } 
      }, 
      new Response.ErrorListener(){...               
      }); 
    requestQueue.add(jsonObjectRequest); 
    new Toastnotify(getApplicationContext(),str[0]); 
    return(str[0]); //str[0] contains null instead of abc 
} 

«окончательное String [] массив автоматически создается на исправление ошибки«Transform ул в конечный массив один элемент»в onResponse method.Why является его создания массива и не просто сделать str final? (я пробовал делать это вручную, но это дает такая же ошибка). Я знаю, что это внутренний класс, и поэтому я должен сделать его окончательным, но почему массив?

Как я могу отправить возвращенную строку в str [0] в onResponse обратно вызывающему методу в методе parseJSONResponse?

+0

Pls прочитать http://stackoverflow.com/questions/31602042/android- java-how-to-delay-return-in-a-method – BNK

ответ

0

Измените код, как это и попробовать: Создать CallBackinterface, а затем передавать данные абоненту в через этот CallBack

public void createmovieJSON(String strurl, CallBack callBack) 
{ 

    RequestQueue requestQueue = Singelton.instantinate().getRequestqueue();      

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, strurl, 
      new Response.Listener<JSONObject>()             
      { 
       @Override 
       public void onResponse(JSONObject response) 
       { 


        new Toastnotify(getApplicationContext(),str[0]); 
        requestQueue.add(jsonObjectRequest); 
        new Toastnotify(getApplicationContext(),str[0]); 

        callBack.data(parseMovieResponse(response)); 
       } 
      }, 
      new Response.ErrorListener(){...               
      }); 

} 

    interface CallBack { 
     void data(String str); 
    } 
+0

Вы имеете в виду что-то вроде этого: http://tinypic.com/r/2hqcu2v/9, он дает ошибку json ObjectRequest, возможно, не был инициализирован. – Junior

+0

Да, потому что вы получаете данные через сеть, тогда он будет выполнен в другом потоке, поэтому ваш метод вернется до получения данных. Таким образом, вам нужна обратная связь, когда данные были получены, тогда вы можете получить данные в обратном вызове. –

Смежные вопросы