yamba-8チュートリアルを使ってアンドロイドでStatus.Netにステータス更新を投稿する方法

実際、私はAndroidの問題に直面しています。私は、Status.NetというTwitterのようなアプリに接続するアプリケーションを作成しています。私は自分のユーザー名とパスワードでこのサイトにアカウントを作成しました。今作成したアプリケーションは、このStatus.Netサイトに接続します。もともと、このアンドロイドアプリケーションはMarko GargentaのLearning Androidウェブサイトの1つからピックアップされていて、私はそのgitからソースコードをダウンロードしました。私はfarmnews.aaditech.com/apiとして別のAPIルートを指定して、このアプリケーションの独自のバージョンを作成しています(もともとAPIルートは http://yamba.marakana.com/api )。オリジナルのAPIルートを持つコードが正常に動作していました。 yamba.marakana.comのステータスが更新され、ステータスもタイムラインに表示されます。しかし、私自身のAPIルートを指定すると、status.netに更新され、 "失敗した投稿"というトーストメッセージが表示されます。これは、明らかにstatus.netに投稿されているはずです。私はwhtが問題だと知りません。しかし、APIルートの1行を変更するだけであれば、すべてうまくいくはずです。

YambaApplication.java

package com.marakana.yamba8;

import java.util.List;

import winterwell.jtwitter.Twitter;
import winterwell.jtwitter.Twitter.Status;
import android.app.Application;
import android.content.ContentValues;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;

public class YambaApplication extends Application implements
OnSharedPreferenceChangeListener {
private static final String TAG = YambaApplication.class.getSimpleName();
public static final String LOCATION_PROVIDER_NONE = "NONE";
public static final long INTERVAL_NEVER = 0;
public Twitter twitter;
private SharedPreferences prefs;
private StatusData statusData;
private boolean serviceRunning;
private boolean inTimeline;

@Override
public void onCreate() {
super.onCreate();
this.prefs = PreferenceManager.getDefaultSharedPreferences(this);
this.prefs.registerOnSharedPreferenceChangeListener(this);
this.statusData = new StatusData(this);
Log.i(TAG, "Application started");
}

public synchronized Twitter getTwitter() {
 if (this.twitter == null) {
   String username = this.prefs.getString("username", null);
   String password = this.prefs.getString("password", null);
   //String url = this.prefs.getString("url",
  // "http://yamba.marakana.com/api");
   String url = this.prefs.getString("url",
   "http://farmnews.aaditech.com/index.php/api"); //1
   //String url = this.prefs.getString("url",
   //"http://identi.ca/api");
   //String url = this.prefs.getString("url",
   //"http://farmnews.aaditech.com");

    if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)
      && !TextUtils.isEmpty(url)) {
      this.twitter = new Twitter(username, password);
      this.twitter.setAPIRootUrl(url);
    }
  }
  return this.twitter;
}

 public boolean startOnBoot() {
   return this.prefs.getBoolean("startOnBoot", false);
 }

 public StatusData getStatusData() {
   return statusData;
 }

  public synchronized int fetchStatusUpdates() {
    Log.d(TAG, "Fetching status updates");
    Twitter twitter = this.getTwitter();
    if (twitter == null) {
    Log.d(TAG, "Twitter connection info not initialized");
    return 0;
  }
  try {
    List statusUpdates = twitter.getFriendsTimeline();
    long latestStatusCreatedAtTime = this.getStatusData()
      .getLatestStatusCreatedAtTime();
    int count = 0;
    ContentValues values = new ContentValues();
    for (Status status : statusUpdates) {
      values.put(StatusData.C_ID, status.getId());
      long createdAt = status.getCreatedAt().getTime();
      values.put(StatusData.C_CREATED_AT, createdAt);
      values.put(StatusData.C_TEXT, status.getText());
      values.put(StatusData.C_USER, status.getUser().getName());
      Log.d(TAG, "Got update with id " + status.getId() + ". Saving");
      this.getStatusData().insertOrIgnore(values);
      if (latestStatusCreatedAtTime < createdAt) {
       count++;
      }
     }
    Log.d(TAG, count > 0 ? "Got " + count + " status updates"
      : "No new status updates");
    return count;
    } catch (Exception e) {
    Log.e(TAG, "Failed to fetch status updates", e);
    return 0;
   }
 }

  public synchronized void onSharedPreferenceChanged(
    SharedPreferences sharedPreferences, String key) {
    this.twitter = null;
  }

  public boolean isServiceRunning() {
     return serviceRunning;
  }

  public void setServiceRunning(boolean serviceRunning) {
    this.serviceRunning = serviceRunning;
  }

  public boolean isInTimeline() {
     return inTimeline;
  }

  public void setInTimeline(boolean inTimeline) {
     this.inTimeline = inTimeline;
  }

  public String getProvider() {
     return prefs.getString("provider", LOCATION_PROVIDER_NONE);
  }

  public long getInterval() {
    //For some reason storing interval as long doesn't work
     return Long.parseLong(prefs.getString("interval", "0"));
  }

  @Override
  public void onTerminate() {
  super.onTerminate();
  this.statusData.close();
  Log.i(TAG, "Application terminated");
  }
}

DDMS LogCat

    10-28 00:36:04.964: ERROR/YambaApplication(844): Failed to fetch status updates
10-28 00:36:04.964: ERROR/YambaApplication(844): winterwell.jtwitter.TwitterException: org.json.JSONException: No value for profile_background_color
10-28 00:36:04.964: ERROR/YambaApplication(844):     at winterwell.jtwitter.Twitter$User.(Twitter.java:693)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at winterwell.jtwitter.Twitter$Status.(Twitter.java:464)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at winterwell.jtwitter.Twitter$Status.getStatuses(Twitter.java:342)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at winterwell.jtwitter.Twitter.getStatuses(Twitter.java:1691)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at winterwell.jtwitter.Twitter.getFriendsTimeline(Twitter.java:1454)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at com.marakana.yamba8.YambaApplication.fetchStatusUpdates(YambaApplication.java:73)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at com.marakana.yamba8.UpdaterService.onHandleIntent(UpdaterService.java:35)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at android.os.Looper.loop(Looper.java:123)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at android.os.HandlerThread.run(HandlerThread.java:60)
10-28 00:36:04.964: ERROR/YambaApplication(844): Caused by: org.json.JSONException: No value for profile_background_color
10-28 00:36:04.964: ERROR/YambaApplication(844):     at org.json.JSONObject.get(JSONObject.java:354)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at org.json.JSONObject.getString(JSONObject.java:510)
10-28 00:36:04.964: ERROR/YambaApplication(844):     at winterwell.jtwitter.Twitter$User.(Twitter.java:660)
10-28 00:36:04.964: ERROR/YambaApplication(844):     ... 10 more

I tried using the other API root URL http://identi.ca/api but it does not seem to be working

私を助けてください
よろしくおねがいします。 Sohaib Rahman

0

1 答え

私は同じ問題を抱えている、identi.ca APIは値を返すようには表示されません:

profile_background_color
profile_link_color
profile_text_color
profile_sidebar_fill_color
profile_background_tile

しかし、本の著者によって提供されたカスタマイズされたJTwitterライブラリは、APIが値を返すことを期待しており、見つからない場合、winterwell.jtwitter.TwitterExceptionにラップされたorg.json.JSONExceptionをスローします。

私は図書館のソースを以下からダウンロードしました:

https://github.com/marakana/LearningAndroidYamba/tree/master/JTwitterYamba

上記の項目の関連行をコメントアウトしてライブラリを更新しました。これは私の問題を解決しました。

2
追加された