2014-06-16 1 views
1

Instagram 이미지를 검색 한 다음 내 앱에 표시하기 위해 Instagram API를 사용하는 Android 앱을 만들고 있습니다.Android Instagram API : 사진을 검색하는 방법

저는 this에있는 에있는 자습서를 사용하여 작동하도록 만들었습니다. this과 같습니다.

Webview에서 Instagram 인증을로드하여 첫 번째 부분을 수행 할 수 있었지만 실제로 Instagram imageUrl을 가져 와서 Instagram 계정에서 이미지를 가져 오는 두 번째 부분에 문제가 있습니다.

은 특히 나는이 부분에 문제가있어 :

class LongOperation extends AsyncTask<String, Void, String> { 

static String accessTokenString, id, username, urlString, imageUrlString; 

@Override 
protected String doInBackground(String... params) { 

    try { 
    URL url = new URL(tokenURLString); 
    HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection(); 
    httpsURLConnection.setRequestMethod("POST"); 
    httpsURLConnection.setDoInput(true); 
    httpsURLConnection.setDoOutput(true); 
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(httpsURLConnection.getOutputStream()); 
    outputStreamWriter.write("client_id="+client_id+ 
            "client_secret="+ client_secret + 
            "grant_type=authorization_code" + 
            "redirect_uri="+CALLBACKURL+ 
            "code=" + token); 
    outputStreamWriter.flush(); 

    Log.i(TAG, "before streamToString");  

    String response = streamToString(httpsURLConnection.getInputStream()); 

    Log.i(TAG, "after streamToString"); 

    JSONObject jsonObject = (JSONObject) new JSONTokener(response).nextValue(); 

    accessTokenString = jsonObject.getString("access_token"); //Here is your ACCESS TOKEN 
    id = jsonObject.getJSONObject("user").getString("id"); 
    username = jsonObject.getJSONObject("user").getString("username"); 
    //This is how you can get the user info. 
    //You can explore the JSON sent by Instagram as well to know what info you got in a response 
    } 
    catch (Exception e) 
    { 
     Log.e(TAG, "ERROR AsyncTask"); 
    } 

    return null; 
    } 

    //converts Stream to String 
    public String streamToString(InputStream p_is) 
    { 
     try 
     { 
      BufferedReader m_br; 
      StringBuffer m_outString = new StringBuffer(); 
      m_br = new BufferedReader(new InputStreamReader(p_is)); 
      String m_read = m_br.readLine(); 
      while(m_read != null) 
      { 
       m_outString.append(m_read); 
       m_read =m_br.readLine(); 
      } 

      Log.d(TAG, "m_outString: " + m_outString.toString()); 
      return m_outString.toString(); 
     } 
     catch (Exception e) 
     { 
      Log.e(TAG, "ERROR streamToString"); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
    Log.d(TAG, "Executed AsyncTask"); 
    } 

     @Override 
    protected void onPreExecute() { 
     Log.d(TAG, "About to execute AsyncTask"); 
    } 

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

내가 토큰 변수가 무엇인지 궁금하네요? (doInBackground 메서드, outStreamWriter 인수)

현재 AuthWebViewClient에서 request_token을 추가하고 있습니다. WebView에서 Authorize를 누른 후 AuthWebViewClient가 Instagram에서 request_token을 성공적으로 가져오고 있습니다.

하지만 InputStream을 문자열로 변환하려고하면 오류가 발생합니다!

06-16 14:14:42.302: D/tellmeaboutit(31244): About to execute AsyncTask 
06-16 14:14:42.642: I/tellmeaboutit(31244): request_token: 235958nvzdj243u9o974jd1490139238 
06-16 14:14:42.642: I/tellmeaboutit(31244): before streamToString 
06-16 14:14:42.792: D/tellmeaboutit(31244): ERROR AsyncTask 

"before streamToString"다음에 "ERROR AsyncTask"를 인쇄하고 "after streamToString"에 도달하지 않습니다.

doSomethingIunno.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      new LongOperation().execute(""); 
     } 

    }); 

여기에 어떤 문제가 있습니까 :

나는 버튼 클릭으로 LongOperation를 시작 해요? InputStream을 String으로 변환하려고 할 때 오류가 발생하는 이유는 무엇입니까?

답변

3

자 신의 코드를 작성하는 대신,이 library을 대신 사용해보십시오. "instagram get feeds"부분에있는 custom-ui 예제를보십시오.