如何使用 google Shorter api 创建缩短 Url
我正在尝试使用谷歌缩短器 API 来缩短网址,我尝试在谷歌上找到一些可以帮助我的东西,但我没有找到博客或 java/android 上可以帮助我的东西。如果有人有更好的资源,请建议我。这是我的代码
public class tinyurl extends Activity implements OnClickListener {
EditText original;
TextView txt;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.Button01);
original = (EditText) findViewById(R.id.edittext);
txt = (TextView) findViewById(R.id.TextView03);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
final String GOOGL_URL = "https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyAau1E_WrYwMiTNqhK5hgH0tyWudyahbOI";
String tinyUrl = null;
String original = "http://www.google.com/";
HttpTransport transport = GoogleTransport.create();
GoogleHeaders defaultHeaders = new GoogleHeaders();
transport.defaultHeaders = defaultHeaders;
transport.defaultHeaders.put("Content-Type", "application/json");
transport.addParser(new JsonHttpParser());
HttpRequest request = transport.buildPostRequest();
request.setUrl(GOOGL_URL);
GenericData data = new GenericData();
// data.put("longUrl", "http://www.google.com/");
data.put("longUrl", original);
JsonHttpContent content = new JsonHttpContent();
content.data = data;
request.content = content;
HttpResponse response = null;
try {
response = request.execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("eception occured", e.toString());
}
Result result = null;
try {
result = response.parseAs(Result.class);
Log.d("TinyUrl", result.shortUrl.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class Result extends GenericJson {
public String shortUrl;
}
}
由于这条线,我一直面临强制关闭。
response = request.execute();
有什么建议吗?
这是我的堆栈跟踪(如果它有任何帮助的话)。
05-12 23:48:55.033: ERROR/AndroidRuntime(455): FATAL EXCEPTION: main
05-12 23:48:55.033: ERROR/AndroidRuntime(455): java.lang.ExceptionInInitializerError
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.json.JsonHttpContent.writeTo(JsonHttpContent.java:66)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.apache.ContentEntity.writeTo(ContentEntity.java:55)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:161)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:272)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:119)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:47)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:207)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.tinyurl.tinyurl.onClick(tinyurl.java:113)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.view.View.performClick(View.java:2408)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.view.View$PerformClick.run(View.java:8816)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.os.Handler.handleCallback(Handler.java:587)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.os.Handler.dispatchMessage(Handler.java:92)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.os.Looper.loop(Looper.java:123)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at java.lang.reflect.Method.invokeNative(Native Method)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at java.lang.reflect.Method.invoke(Method.java:521)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at dalvik.system.NativeStart.main(Native Method)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): Caused by: java.lang.NoClassDefFoundError: org.codehaus.jackson.JsonFactory
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.json.Json.<clinit>(Json.java:56)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): ... 25 more
i am trying to shorten a url using google shortener api, i tried my luck to find something on google that could help me but i found no blog or something that on java/android that could help me.If someone have a better resources please suggest me. Here's my code
public class tinyurl extends Activity implements OnClickListener {
EditText original;
TextView txt;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.Button01);
original = (EditText) findViewById(R.id.edittext);
txt = (TextView) findViewById(R.id.TextView03);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
final String GOOGL_URL = "https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyAau1E_WrYwMiTNqhK5hgH0tyWudyahbOI";
String tinyUrl = null;
String original = "http://www.google.com/";
HttpTransport transport = GoogleTransport.create();
GoogleHeaders defaultHeaders = new GoogleHeaders();
transport.defaultHeaders = defaultHeaders;
transport.defaultHeaders.put("Content-Type", "application/json");
transport.addParser(new JsonHttpParser());
HttpRequest request = transport.buildPostRequest();
request.setUrl(GOOGL_URL);
GenericData data = new GenericData();
// data.put("longUrl", "http://www.google.com/");
data.put("longUrl", original);
JsonHttpContent content = new JsonHttpContent();
content.data = data;
request.content = content;
HttpResponse response = null;
try {
response = request.execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("eception occured", e.toString());
}
Result result = null;
try {
result = response.parseAs(Result.class);
Log.d("TinyUrl", result.shortUrl.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class Result extends GenericJson {
public String shortUrl;
}
}
all the time i am facing force close due to this line.
response = request.execute();
any suggestions?
here is my Stack trace if it gives any help.
05-12 23:48:55.033: ERROR/AndroidRuntime(455): FATAL EXCEPTION: main
05-12 23:48:55.033: ERROR/AndroidRuntime(455): java.lang.ExceptionInInitializerError
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.json.JsonHttpContent.writeTo(JsonHttpContent.java:66)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.apache.ContentEntity.writeTo(ContentEntity.java:55)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:161)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:272)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:119)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:47)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:207)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.tinyurl.tinyurl.onClick(tinyurl.java:113)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.view.View.performClick(View.java:2408)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.view.View$PerformClick.run(View.java:8816)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.os.Handler.handleCallback(Handler.java:587)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.os.Handler.dispatchMessage(Handler.java:92)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.os.Looper.loop(Looper.java:123)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at java.lang.reflect.Method.invokeNative(Native Method)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at java.lang.reflect.Method.invoke(Method.java:521)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at dalvik.system.NativeStart.main(Native Method)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): Caused by: java.lang.NoClassDefFoundError: org.codehaus.jackson.JsonFactory
05-12 23:48:55.033: ERROR/AndroidRuntime(455): at com.google.api.client.json.Json.<clinit>(Json.java:56)
05-12 23:48:55.033: ERROR/AndroidRuntime(455): ... 25 more
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在堆栈跟踪的底部,您有一个 NoClassDefFoundError,这意味着您的类路径中缺少一些 jar 文件。
At the bottom of the stack trace you have a NoClassDefFoundError, which means you are missing some jar files on your classpath.
我遇到了 API 问题,所以我使用了 Web API。做了下面的课程,效果很好。使用 GoogleUrlShortener 类(ShortUrlResponse 类,它只是一个解析 json 响应的 pojo)只需替换其中的 api 密钥即可:
I was having issues with the API so I used the web api. Made the classes below and it works fine. Use the GoogleUrlShortener class (the ShortUrlResponse class, its just a pojo to parse the json response) Just replace your api key in there: