如果您对android–会话提供给未打开状态的请求感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于android–会话提供给未打开状态的请求的详细内容,并且为您提供关于and
如果您对android – 会话提供给未打开状态的请求感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于android – 会话提供给未打开状态的请求的详细内容,并且为您提供关于android 4.0版本以下未打开摄像头的问题、Android Facebook SDK 3.0会话状态“打开”、Android Volley 发送一个简单的请求、android – Jumblr API在向Tumblr发布图像时提供了错误的请求的有价值信息。
本文目录一览:- android – 会话提供给未打开状态的请求
- android 4.0版本以下未打开摄像头的问题
- Android Facebook SDK 3.0会话状态“打开”
- Android Volley 发送一个简单的请求
- android – Jumblr API在向Tumblr发布图像时提供了错误的请求
android – 会话提供给未打开状态的请求
消息框说:
‘com.facebook.Facebook异常:为未打开状态的请求提供的会话.
解决方法
仔细检查您使用的哈希键是否正确.请参阅此答案以设置您的哈希键
Key hash for Android-Facebook app
此外,使用Keytool对我的HashKey没有帮助,而是我遵循了本指南中的建议:
https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
在步骤4中,请参阅疑难解答,并修改代码以输出您的HashKey并使用该代码.我从Keytool生成的hashkey与这个很不一样.之后重新编译一切,它应该工作正常.
android 4.0版本以下未打开摄像头的问题
开发项目时需要打开摄像头,4.0版本及以上运行正常,在测试2.3时发现无法打开摄像头,后查找相关资料及对比项目发现在4.0以下版本打开摄像头需要添加代码:Holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Android Facebook SDK 3.0会话状态“打开”
我的Facebook布局按钮
<com.facebook.widget.LoginButton android:id="@+id/authButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" />
片段是
public class FacebookFragment extends Fragment { private static final String TAG = "FacebookFragment"; private UiLifecycleHelper uiHelper; private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(final Session session,final SessionState state,final Exception exception) { onSessionStateChange(session,state,exception); } }; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.activity_main,container,false); LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); authButton.setFragment(this); authButton.setReadPermissions(Arrays.asList("user_likes","user_status")); return view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); uiHelper = new UiLifecycleHelper(getActivity(),callback); uiHelper.onCreate(savedInstanceState); } @Override public void onResume() { super.onResume(); Session session = Session.getActiveSession(); if (session != null && (session.isOpened() || session.isClosed()) ) { onSessionStateChange(session,session.getState(),null); } uiHelper.onResume(); } @Override public void onActivityResult(int requestCode,int resultCode,Intent data) { super.onActivityResult(requestCode,resultCode,data); uiHelper.onActivityResult(requestCode,data); } @Override public void onPause() { super.onPause(); uiHelper.onPause(); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); } private void onSessionStateChange(Session session,SessionState state,Exception exception) { if (state.isOpened()) { Log.i(TAG,"Logged in..."); } else if (state.isClosed()) { Log.i(TAG,"Logged out..."); } else Log.i(TAG,session.toString()); }
}
在活动中,我已经实现了所需的onActivityResult并检索了片段
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null) { // Add the fragment on initial activity setup mainFragment = new FacebookFragment(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content,mainFragment) .commit(); } else { // Or set the fragment from restored state info mainFragment = (FacebookFragment) getSupportFragmentManager() .findFragmentById(android.R.id.content); } } @Override public void onActivityResult(int requestCode,data); Session.getActiveSession().onActivityResult(this,requestCode,data); }
我想也许问题可能在于Key Hash,但我完全按照Key hash for Android-Facebook app问题上的答案完成了指示
任何关于如何让州“开放”的领导将不胜感激
解决方法
Android Volley 发送一个简单的请求
可以通过创建一个RequestQueue并传递Request对象来使用Volley。RequestQueue管理工作线程,这些线程用于运行网络操作、读取和写入缓存和解析响应。Request对原始响应进行解析,并且Volley负责将已解析的响应分派回主线程。
本文介绍如何使用Volley.newRequestQueue的便捷方法发送请求,该方法为您这是了一个RequestQueue。本文还介绍了如何向RequestQueue添加请求和取消请求。
添加INTERNET权限
使用Volley,需要将android.permission.INTERNET权限添加到app的清单文件中。否则app将不能连接网络。
使用 newRequestQueue
Volley提供了一个便捷的方法Volley.newRequestQueue,它使用默认值创建一个RequestQueue,并启动队列。例如:
final TextView mTextView = (TextView) findViewById(R.id.text);
...
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
mTextView.setText("Response is: "+ response.substring(0,500));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText("That didn''t work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
Volley总是在主线程上提解析响应。在主线程上运行可以方便的使用接收到的数据填充UI控件,因此可以直接从响应的处理程序中自由的修改UI控件。同时这对于本库提供的许多主要特性也很重要,特别是与取消请求有关。
发送请求
要发送一个请求,只需要构建一个请求,并使用RequestQueue的add()方法将其添加到RequestQueue中,如上所示。一旦添加了一个请求,它通过管道移动、得到服务,并拥有自己的已投递和解析的响应。
当调用add()时,Vollley运行一个缓存处理线程和一个网络调度线程池。当向队列添加请求时,它由缓存线程拾取并分类:如果请求可以被缓存处理,那么缓存响应就在缓存线程中被解析并且解析后的响应被传递到主线程。如果请求不能被缓存处理,他被放置在网络队列中。第一个有效的网络线程从队列中获取请求,执行HTTP事务,并在工作线程中解析响应,将响应写入缓存,然后将解析过的响应送回主线程被传递。
请注意,耗时操作(如阻塞I/O和解析/解码)是在工作线程上完成的。可以在任何线程中添加请求,但是响应始终在主线程上传递。
要取消一个请求,需要在Request对象上调用cancel()。一旦被取消,Volley保证响应处理程序永远不会被调用。这在实践中意味着可以在activity的onStop()方法中取消所有待处理的请求并且不必在响应处理程序中检查getActivity()==null。
要利用此行为,您通常必须跟踪所有正在运行的请求,以便能够在适当的时间取消它们。有一个更简单的方法:可以将标记对象与每个请求相关联。然后,可以使用此标签来提供要取消的请求范围。例如,可以标记Activity中的所有请求,并在onStop()中调用requestQueue.cancelAll(this)。同样,可以使用相应的标签标记ViewPager一个标签中的所有缩略图请求,并在滑动时取消这些request以确保新标签不被另一个标签的请求阻塞。
下面是使用字符串标签的例子:
- 定义tag并将其添加给请求。
public static final String TAG = "MyTag";
StringRequest stringRequest; // Assume this exists.
RequestQueue mRequestQueue; // Assume this exists.
// Set the tag on the request.
stringRequest.setTag(TAG);
// Add the request to the RequestQueue.
mRequestQueue.add(stringRequest);
- 在Activity的onStop()方法中,取消有此标签的所有请求。
@Override
protected void onStop () {
super.onStop();
if (mRequestQueue != null) {
mRequestQueue.cancelAll(TAG);
}
}
取消请求时请小心。如果您依赖于您的响应处理程序来推进状态或启动另一个进程,则需要考虑这一点。
android – Jumblr API在向Tumblr发布图像时提供了错误的请求
我有一个图像文件对象试图使用Jumblr API发布到Tumblr
我的问题
当我尝试发布图像时,我得到com.tumblr.jumblr.exceptions.JumblrException:错误的请求响应代码:400
我的代码
client = new JumblrClient(CONSUMER_KEY,SECRET_KEY); client.setToken(TOKEN,TOKEN_SECRET); User user=client.user(); userName=user.getName(); PhotoPost photoPost=client.newPost(client.user().getBlogs().get(0).getName(),PhotoPost.class); photoPost.setCaption("My Tumblr post"); photoPost.setPhoto(new Photo(Methods.FILE_IMAGE)); photoPost.save();
解决方法
而不是这个方法(它以某种方式触发Android画廊?无法找到Methods.FILE_IMAGE的任何javadoc)
photoPost.setPhoto(new Photo(Methods.FILE_IMAGE));
我建议你试试任何味道
photoPost.setData(new File(fileName)); //if it''s possible on Android
请尝试使用不同的文件:Tumblr不仅有文件大小限制,还有一些奇怪的检查文件是否有效.我上传的~3%的gif文件丢弃请求响应代码:400.这些文件不超过GIF大小限制并且它们在我的机器上显示正常,但是Tumblr由于某种原因拒绝它们,所以请尝试使用post.setData并使用一些防弹有效文件进行尝试,因为其余的代码 – 看起来你肯定做得对
关于android – 会话提供给未打开状态的请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android 4.0版本以下未打开摄像头的问题、Android Facebook SDK 3.0会话状态“打开”、Android Volley 发送一个简单的请求、android – Jumblr API在向Tumblr发布图像时提供了错误的请求等相关知识的信息别忘了在本站进行查找喔。
本文标签: