2014-07-11 2 views
0

GoogleHttpClientSpiceRequest에 대한 샘플을 사용하지만 JSON 형식으로 요청을 보내야합니다. 그래서, 난 내 코드를 변경하지만 오류가 발생했습니다 :RoboSpice JSON 서버 요청

07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662): 15:39:08.744 
Thread-11643 An exception occurred during request network execution :null 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662): java.lang.NullPointerException 07-11 15:39:08.738: 
E//DefaultRequestRunner.java:138(5662):  at com.octo.android.robospice.sample.googlehttpclient.SampleSpiceRequest.loadDataFromNetwork(SampleSpiceRequest.java:43) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at com.octo.android.robospice.sample.googlehttpclient.SampleSpiceRequest.loadDataFromNetwork(SampleSpiceRequest.java:1) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at com.octo.android.robospice.request.CachedSpiceRequest.loadDataFromNetwork(CachedSpiceRequest.java:45) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at com.octo.android.robospice.request.DefaultRequestRunner.processRequest(DefaultRequestRunner.java:134) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at com.octo.android.robospice.request.DefaultRequestRunner$1.run(DefaultRequestRunner.java:201) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 07-11 
15:39:08.738: E//DefaultRequestRunner.java:138(5662): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
07-11 15:39:08.738: E//DefaultRequestRunner.java:138(5662):  at java.lang.Thread.run(Thread.java:864) 

내 코드 : 패키지 com.octo.android.robospice.sample.googlehttpclient;

import java.io.IOException; 

import org.json.JSONException; 
import org.json.JSONObject; 

import roboguice.util.temp.Ln; 

import android.util.Log; 

import com.google.api.client.http.ByteArrayContent; 
import com.google.api.client.http.GenericUrl; 
import com.google.api.client.http.HttpRequest; 
import com.google.api.client.json.jackson.JacksonFactory; 
import com.octo.android.robospice.request.googlehttpclient.GoogleHttpClientSpiceRequest; 
import com.octo.android.robospice.sample.googlehttpclient.model.json.WeatherResult; 

public class SampleSpiceRequest extends GoogleHttpClientSpiceRequest<WeatherResult> { 

    private String baseUrl; 
    private JSONObject jsonObject; 

    public SampleSpiceRequest(String zipCode) { 
     super(WeatherResult.class); 
     this.baseUrl = "my domain"; 

     JSONObject jsonObject = new JSONObject(); 
     try { 
      jsonObject.accumulate("action", "login"); 
      jsonObject.accumulate("username", "root"); 
      jsonObject.accumulate("password", "pass"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     }   
    } 

    @Override 
    public WeatherResult loadDataFromNetwork() throws IOException {   
      HttpRequest request = getHttpRequestFactory().buildPostRequest(
        new GenericUrl(baseUrl), 
        ByteArrayContent.fromString("application/json", jsonObject.toString()) 
       ); 
      request.setParser(new JacksonFactory().createJsonObjectParser()); 
      Log.i("DEBUG", request.execute().parseAsString()); 


      return request.execute().parseAs(getResultType()); 
    } 

} 

답변

0

당신은 지역 변수 JSONObject jsonObject는 인스턴스 멤버 JSONObject jsonObject을 숨어있다. 여기

글로벌 : private JSONObject jsonObject;

여기에 당신이 된 JSONObject 두 번 선언이 Variable Shadowing

+0

감사가 왜 널 private JSONObject jsonObject;로 다스 려하는 loadDataFromNetwork에서 jsonObject.toString()를 호출 할 때, 그 참조 did't. .. – Lenmon

+0

Eclipse를 사용하는 경우 두 번째 항목은 '로컬 변수 선언이 다른 필드 또는 변수를 숨 깁니다.'섹션에서 '환경 설정> Java> 컴파일러> 오류/경고'로 이동할 수 있습니다. 이런 종류의 일이 발생할 때 경고하기 위해 이것을'Warning'으로 설정하십시오. – njzk2

+0

나는 안드로이드 스튜디오를 사용하고 있지만 몇 시간이 지난 후에도 그렇게 생각하지 않았습니다. Thank4! – Lenmon

0

라고

public SampleSpiceRequest(String zipCode) { 
    // ... 
    jsonObject = new JSONObject(); 
    // ... 
} 

:

는 인스턴스 멤버를 초기화하는 생성자를 변경

, 로컬

하나는 지역 decalred 그건
JSONObject jsonObject = new JSONObject(); 
    try { 
     jsonObject.accumulate("action", "login"); 
     jsonObject.accumulate("username", "root"); 
     jsonObject.accumulate("password", "pass"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

SampleSpiceRequest 생성자 내부에서만 볼 수 있습니다, 그래서 당신은 당신이 그게 있도록 NullPointerException

+0

고마워, 나는 그것을 보지 못했다 ... – Lenmon