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으로 변환하려고 할 때 오류가 발생하는 이유는 무엇입니까?